STEPPR_BANKS = {'InstrumentGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'DrumGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'Operator':[['Osc-A Level', 'Osc-B Level', 'Osc-C Level', 'Osc-D Level', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'UltraAnalog':[['AEG1 Attack', 'AEG1 Decay', 'AEG1 Sustain', 'AEG1 Rel', 'OSC1 Semi', 'F1 Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'OriginalSimpler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'MultiSampler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']], 
			'LoungeLizard':[['M Force', 'F Release', 'F Tone Decay', 'F Tone Vol', 'Semitone', 'P Distance', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'StringStudio':[['E Pos', 'Exc ForceMassProt', 'Exc FricStiff', 'Exc Velocity', 'Semitone', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']], 
			'Collision':[['Noise Attack', 'Noise Decay', 'Noise Sustain', 'Noise Release', 'Res 1 Tune', 'Res 1 Brightness', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'InstrumentImpulse':[['1 Start', '1 Envelope Decay', '1 Stretch Factor', 'Global Time', 'Global Transpose', '1 Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'NoDevice':[['None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']]}

SYNTH_STEPPR_BANKS = {'InstrumentGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'DrumGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'Operator':[['Osc-A Level', 'Osc-B Level', 'Osc-C Level', 'Osc-D Level', 'Transpose', 'Filter Freq', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'UltraAnalog':[['AEG1 Attack', 'AEG1 Decay', 'AEG1 Sustain', 'AEG1 Rel', 'OSC1 Semi', 'F1 Freq', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'OriginalSimpler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'MultiSampler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']], 
			'LoungeLizard':[['M Force', 'F Release', 'F Tone Decay', 'F Tone Vol', 'Semitone', 'P Distance', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'StringStudio':[['E Pos', 'Exc ForceMassProt', 'Exc FricStiff', 'Exc Velocity', 'Semitone', 'Filter Freq', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']], 
			'Collision':[['Noise Attack', 'Noise Decay', 'Noise Sustain', 'Noise Release', 'Res 1 Tune', 'Res 1 Brightness', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'InstrumentImpulse':[['1 Start', '1 Envelope Decay', '1 Stretch Factor', 'Global Time', 'Global Transpose', '1 Filter Freq', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']],
			'NoDevice':[['None', 'None', 'None', 'None', 'None', 'None', 'ModDevice_chord_steps', 'ModDevice_chord_thin', 'ModDevice_Repeat', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']]}

HEX_SPEED_1 = ['ModDevice_Speed1', 'ModDevice_Speed2', 'ModDevice_Speed3', 'ModDevice_Speed4', 'ModDevice_Speed5', 'ModDevice_Speed6', 'ModDevice_Speed7', 'ModDevice_Speed8', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']
HEX_SPEED_2 = ['ModDevice_Speed9', 'ModDevice_Speed10', 'ModDevice_Speed11', 'ModDevice_Speed12', 'ModDevice_Speed13', 'ModDevice_Speed14', 'ModDevice_Speed15', 'ModDevice_Speed16', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize']
HEX_BANKS = {'InstrumentGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'DrumGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'Operator':[['Osc-A Level', 'Osc-B Level', 'Osc-C Level', 'Osc-D Level', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['Osc-A Level', 'Osc-B Level', 'Osc-C Level', 'Osc-D Level', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'UltraAnalog':[['AEG1 Attack', 'AEG1 Decay', 'AEG1 Sustain', 'AEG1 Rel', 'OSC1 Semi', 'F1 Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['AEG1 Attack', 'AEG1 Decay', 'AEG1 Sustain', 'AEG1 Rel', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'OriginalSimpler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'MultiSampler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'LoungeLizard':[['M Force', 'F Release', 'F Tone Decay', 'F Tone Vol', 'Semitone', 'P Distance', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['M Force', 'F Release', 'F Tone Decay', 'F Tone Vol', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'StringStudio':[['E Pos', 'Exc ForceMassProt', 'Exc FricStiff', 'Exc Velocity', 'Semitone', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['E Pos', 'Exc ForceMassProt', 'Exc FricStiff', 'Exc Velocity', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'Collision':[['Noise Attack', 'Noise Decay', 'Noise Sustain', 'Noise Release', 'Res 1 Tune', 'Res 1 Brightness', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['Noise Attack', 'Noise Decay', 'Noise Sustain', 'Noise Release', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'InstrumentImpulse':[['1 Start', '1 Envelope Decay', '1 Stretch Factor', 'Global Time', 'Global Transpose', '1 Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['1 Start', '1 Envelope Decay', '1 Stretch Factor', 'Global Time', 'ModDevice_PolyOffset', 'ModDevice_Mode', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2], 
			'NoDevice':[['None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], ['None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'ModDevice_Channel', 'ModDevice_Groove', 'ModDevice_Random', 'ModDevice_RotSize'], HEX_SPEED_1, HEX_SPEED_2]}

TR256_BANKS = {'InstrumentGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'DrumGroupDevice':[['Macro 1', 'Macro 2', 'Macro 3', 'Macro 4', 'Macro 5', 'Macro 6', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'Operator':[['Osc-A Level', 'Osc-B Level', 'Osc-C Level', 'Osc-D Level', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'UltraAnalog':[['AEG1 Attack', 'AEG1 Decay', 'AEG1 Sustain', 'AEG1 Rel', 'OSC1 Semi', 'F1 Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'OriginalSimpler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'MultiSampler':[['Ve Attack', 'Ve Decay', 'Ve Sustain', 'Ve Release', 'Transpose', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']], 
			'LoungeLizard':[['M Force', 'F Release', 'F Tone Decay', 'F Tone Vol', 'Semitone', 'P Distance', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'StringStudio':[['E Pos', 'Exc ForceMassProt', 'Exc FricStiff', 'Exc Velocity', 'Semitone', 'Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']], 
			'Collision':[['Noise Attack', 'Noise Decay', 'Noise Sustain', 'Noise Release', 'Res 1 Tune', 'Res 1 Brightness', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'InstrumentImpulse':[['1 Start', '1 Envelope Decay', '1 Stretch Factor', 'Global Time', 'Global Transpose', '1 Filter Freq', 'Mod_Chain_Pan', 'Mod_Chain_Vol', 'ModDevice_transpose', 'ModDevice_Delay', 'ModDevice_Random', 'ModDevice_swing']],
			'NoDevice':[[]]}	

MOD_BANK_DICT = {'Hex':['Controls_Drum', 'Controls_Poly', 'Speed_A', 'Speed_B'], 'DrumSteppr':[''], 'SynthSteppr':[''], 'TR256':['']}

MOD_TYPES = {'Hex':HEX_BANKS, 'DrumSteppr':STEPPR_BANKS, 'SynthSteppr':SYNTH_STEPPR_BANKS, 'TR256':TR256_BANKS}

MOD_CNTRL_OFFSETS = {'Hex': 3, 'DrumSteppr': 0, 'SynthSteppr': 0, 'TR256': 0}
